﻿package frEngine.render.layer.uiEffectLayer
{
    import __AS3__.vec.*;
    import baseEngine.basic.*;
    import baseEngine.core.*;
    import flash.utils.*;

    public class UIEffectList extends Object
    {
        public var layMap:Dictionary;
        public var layers:Vector.<UIEffectRenderList>;
        public static const instance:UIEffectList = new UIEffectList;

        public function UIEffectList()
        {
            this.layMap = new Dictionary(false);
            this.layers = new Vector.<UIEffectRenderList>;
            return;
        }// end function

        public function clear() : void
        {
            var _loc_1:RenderList = null;
            for each (_loc_1 in this.layMap)
            {
                
                _loc_1.clear();
            }
            this.layers.length = 0;
            this.layMap = new Dictionary(false);
            return;
        }// end function

        public function getRenderListByUILayerID(param1:int) : RenderList
        {
            var _loc_3:int = 0;
            var _loc_2:* = this.layMap[param1];
            if (_loc_2 == null)
            {
                _loc_2 = new UIEffectRenderList(param1);
                this.layMap[param1] = _loc_2;
                _loc_3 = this.fastGetIndexByListId(param1);
                this.layers.splice(_loc_3, 0, _loc_2);
            }
            return _loc_2;
        }// end function

        public function removeUIEffectRenderList(param1:int) : void
        {
            var _loc_2:* = this.layMap[param1];
            if (_loc_2 == null)
            {
                return;
            }
            var _loc_3:* = this.layers.indexOf(_loc_2);
            if (_loc_3 != -1)
            {
                this.layers.splice(_loc_3, 1);
            }
            this.layMap[param1] = null;
            return;
        }// end function

        private function fastGetIndexByListId(param1:int) : int
        {
            var _loc_5:int = 0;
            var _loc_2:* = this.layers.length;
            var _loc_3:int = 0;
            var _loc_4:int = 0;
            while (_loc_3 < _loc_2)
            {
                
                _loc_4 = _loc_3 + _loc_2 >> 1;
                _loc_5 = this.layers[_loc_4].layerid;
                if (_loc_5 == param1)
                {
                    _loc_2 = _loc_4;
                    break;
                }
                if (param1 > _loc_5)
                {
                    _loc_3 = _loc_4 + 1;
                    continue;
                }
                _loc_2 = _loc_4 + 1;
            }
            return _loc_2;
        }// end function

        private function renderRenderList(param1:RenderList) : void
        {
            var _loc_5:Layer3DSort = null;
            var _loc_6:Vector.<Mesh3D> = null;
            var _loc_7:int = 0;
            var _loc_8:int = 0;
            var _loc_9:Mesh3D = null;
            var _loc_2:* = param1.layers;
            var _loc_3:* = _loc_2.length;
            var _loc_4:int = 0;
            while (_loc_4 < _loc_3)
            {
                
                _loc_5 = _loc_2[_loc_4];
                if (_loc_5.isActive)
                {
                    _loc_5.sort();
                }
                _loc_6 = _loc_5.list;
                _loc_7 = _loc_6.length;
                if (_loc_7 > 0)
                {
                    _loc_8 = 0;
                    while (_loc_8 < _loc_7)
                    {
                        
                        _loc_9 = _loc_6[_loc_8];
                        _loc_9.draw(false);
                        _loc_8++;
                    }
                }
                _loc_4++;
            }
            return;
        }// end function

        public function render() : void
        {
            var _loc_1:* = this.layers.length;
            var _loc_2:int = 0;
            while (_loc_2 < _loc_1)
            {
                
                this.renderRenderList(this.layers[_loc_2]);
                _loc_2++;
            }
            return;
        }// end function

    }
}
